---
title: 'Fly.io'
metaTitle: 'Deploy Prisma Postgres apps to Fly.io'
metaDescription: 'Learn how to deploy applications using Prisma Postgres to Fly.io.'
tocDepth: 3
toc: true
---

[Fly.io](https://fly.io/) is a cloud application platform that lets you deploy full-stack applications globally. This guide shows you how to deploy a Node.js application using Prisma Postgres to Fly.io.

## Prerequisites

- A [Fly.io account](https://fly.io/docs/getting-started/launch/)
- The [Fly CLI](https://fly.io/docs/flyctl/install/) installed
- An existing application using [Prisma Postgres](/postgres) (see [Quickstart](/getting-started/prisma-postgres/quickstart/prisma-orm))

## Deploy your application

### 1. Generate Prisma Client in `postinstall`

Ensure your `package.json` includes a `postinstall` script to generate Prisma Client during deployment:

```json file=package.json
{
  // ...
  "scripts": {
    // ...
    // add-next-line
    "postinstall": "prisma generate"
  }
}
```

### 2. Launch your app with Fly.io

From your project directory, run:

```terminal
fly launch
```

Follow the prompts to configure your application. Fly.io will auto-detect your Node.js application and create the necessary configuration.

### 3. Set your database connection string

Add your Prisma Postgres `DATABASE_URL` as a secret in Fly.io:

```terminal
fly secrets set DATABASE_URL="your-prisma-postgres-connection-string"
```

:::tip
You can find your `DATABASE_URL` in your `.env` file or in the [Prisma Console](https://console.prisma.io).
:::

### 4. Deploy

If not already deployed during `fly launch`, deploy your application:

```terminal
fly deploy
```

Once the deployment completes, you'll see a success message with your app's URL:

```
🎉  SUCCESS! Your app is live and ready to use!  🎉

Visit: https://your-app-name.fly.dev/
```

:::note
In the Fly.io dashboard, your app's status may show as "Pending" initially. It typically transitions to "Deployed" within a few minutes.
:::

## Additional considerations

### Ensure your project uses the correct environment variable

Ensure that the data source in your `prisma.config.ts` file is configured to use the `DATABASE_URL` environment variable:

```ts file=prisma.config.ts
import 'dotenv/config';
import { defineConfig, env } from 'prisma/config';

export default defineConfig({
  datasource: {
    url: env('DATABASE_URL'),
  },
  schema: './prisma/schema.prisma',
});
```

### Running migrations in production

To run migrations on your deployed Fly.io app, you can use:

```terminal
fly ssh console -C "npx prisma migrate deploy"
```

Or add a release command to your `fly.toml`:

```toml file=fly.toml
[deploy]
  release_command = "npx prisma migrate deploy"
```

### Scaling and regions

Fly.io lets you scale and place your application in [multiple regions](https://fly.io/docs/reference/regions/). For optimal performance, deploy your app in a region close to your Prisma Postgres database region.

```terminal
fly scale count 2 --region iad
```

## Troubleshooting

### Prisma schema not found or Client not generated correctly

If you're using a custom Dockerfile and your build fails because the Prisma Client cannot be found, it's likely due to one of two reasons:

1. **Order of operations**: `npm install` (which runs `postinstall`) runs before the schema is copied.
2. **Incorrect copy path**: The schema is copied to the root instead of the `prisma` folder.

**Solution:** In your Dockerfile, copy the `prisma/` directory to `./prisma` **before** running `npm install`:

```dockerfile
# ❌ Wrong order or path
COPY package*.json ./
COPY prisma .                   # Copies contents to root (wrong structure)
RUN npm install                 # postinstall runs but might fail or generate in wrong place

# ✅ Correct order and path
COPY package*.json ./
COPY prisma ./prisma            # Copies to ./prisma folder (preserves structure)
RUN npm install                 # postinstall finds schema in expected location
COPY . .
```

## More information

- [Fly.io Node.js documentation](https://fly.io/docs/languages-and-frameworks/node/)
- [Fly.io Prisma documentation](https://fly.io/docs/js/prisma/)
- [Prisma Postgres documentation](/postgres)

